/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名:LogRecordListener.java
 * <p>
 * 类产生时间: 2012-9-18 下午2:06:48
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.recorder;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.springframework.context.ApplicationListener;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;

import com.oceansoft.core.common.constant.ConstantMap;
import com.oceansoft.core.domain.SysOperLog;

public class LogRecordListener implements ApplicationListener<LogRecordEvent> {
	private JdbcTemplate jt;
	private LobHandler lobHandler;

	@Override
	public void onApplicationEvent(final LogRecordEvent event) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				final SysOperLog log = event.getSysOperLog();
				String sql = "INSERT INTO T_SYS_OPER_LOG(DBID,OPERTYPE,OPERTIME,CONTENT,TITLE,USERID,UNAME,MODULE,MODNAME,SNAPDATA,IP,OPERRESULT) VALUES(SEQ_SYS_OPER_LOG.NEXTVAL,?,SYSDATE,?,?,?,?,?,?,?,?,?)";
				jt.execute(sql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
					@Override
					protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException,
							DataAccessException {
						ps.setInt(1, log.getOperType());
						ps.setString(2, log.getContent());
						ps.setString(3, log.getTitle());
						ps.setString(4, log.getUserid());
						ps.setString(5, log.getUname());
						ps.setString(6, log.getModule());
						ps.setString(7, ConstantMap.modual(log.getModule()));
						lobCreator.setClobAsString(ps, 8, log.getSnapData());
						ps.setString(9, log.getIp());
						ps.setString(10, log.getOperResult());
					}
				});
			}
		}).start();
	}

	public JdbcTemplate getJt() {
		return jt;
	}

	public void setJt(JdbcTemplate jt) {
		this.jt = jt;
	}

	public LobHandler getLobHandler() {
		return lobHandler;
	}

	public void setLobHandler(LobHandler lobHandler) {
		this.lobHandler = lobHandler;
	}
}
